题目描述

有一时钟在某时刻的时间为HH:MM:SS（24小时制），在经过一段时间(<24h)后，其时间变为hh:mm:ss 求其中经过了多少秒。

输入：
第一行输入时间HH:MM:SS
第二行输入时间hh:mm:ss

输出：
输出两时刻内经过的秒数。

输入样例1:
06:16:02
06:17:22

输出样例1:
80

输入样例2:
23:59:59
00:00:01

输出样例2:
2

#include<iostream>
using namespace std;

int main()
{
    int h1, m1, s1, h2, m2, s2;
    char colon;
    
    // 读取时间（自动去除前导零）
    cin >> h1 >> colon >> m1 >> colon >> s1;
    cin >> h2 >> colon >> m2 >> colon >> s2;
    
    // 转换为总秒数
    int total1 = h1 * 3600 + m1 * 60 + s1;
    int total2 = h2 * 3600 + m2 * 60 + s2;
    
    // 计算时间差（处理跨天）
    int diff = total2 - total1;
    if(diff < 0) {
        diff += 24 * 3600;  // 加上一天的秒数
    }
    
    // 或者用取模方法（更简洁）：
    // int diff = (total2 - total1 + 86400) % 86400;
    
    cout << diff << endl;
    
    return 0;
}

题目描述

老式的计算机只能按照固定次序进行运算，华安大学就有这样一台老式计算机，计算模式为A @ B #C，@和#为输入的运算符（可能是+、-或*，运算符优先级与C++一致），现给出A，B，C的数值以及@和#对应的运算符，请你编写程序，验证老式计算机的运行结果。

输入说明：
第一行是一个整数N（|N|≤10000），表示有N组计算数据需要处理，接下来N行，每行是相应的数据，包括三个整数和两个运算符，分别对应A、@、B、#和C。

输出说明：
对每行输入的数据，输出计算结果。

输入样例：
3
1+2*3
3*2-1
5+7-9

输出样例：
7
5
3

#include <iostream>
#include <string>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    while (N--) {
        int A, B, C;
        char op1, op2;
        
        // 读取 A@B#C
        cin >> A >> op1 >> B >> op2 >> C;
        
        int result;
        
        // 判断优先级
        if (op2 == '*' && (op1 == '+' || op1 == '-')) {
            // 先算 B#C
            int temp;
            if (op2 == '*') temp = B * C;
            
            // 再算 A@temp
            if (op1 == '+') result = A + temp;
            else if (op1 == '-') result = A - temp;
            else if (op1 == '*') result = A * temp;
        } else {
            // 先算 A@B
            int temp;
            if (op1 == '+') temp = A + B;
            else if (op1 == '-') temp = A - B;
            else if (op1 == '*') temp = A * B;
            
            // 再算 temp#C
            if (op2 == '+') result = temp + C;
            else if (op2 == '-') result = temp - C;
            else if (op2 == '*') result = temp * C;
        }
        
        cout << result << endl;
    }
    
    return 0;
}

#include <iostream>
#include <stack>
#include <map>
using namespace std;

map<char, int> priority = {
    {'+', 1}, {'-', 1}, {'*', 2}
};

int calculate(int a, int b, char op) {
    if(op == '+') return a + b;
    if(op == '-') return a - b;
    if(op == '*') return a * b;
    return 0;
}

int main() {
    int N;
    cin >> N;
    
    while(N--) {
        int A, B, C;
        char op1, op2;
        cin >> A >> op1 >> B >> op2 >> C;
        
        stack<int> nums;
        stack<char> ops;
        
        // 初始入栈
        nums.push(A);
        ops.push(op1);
        nums.push(B);
        
        // 处理第二个运算符：检查优先级
        if(!ops.empty() && priority[op2] <= priority[ops.top()]) {
            // 先计算前面的运算
            int b = nums.top(); nums.pop();
            int a = nums.top(); nums.pop();
            char op = ops.top(); ops.pop();
            nums.push(calculate(a, b, op));
        }
        
        // 入栈第二个运算符和数字
        ops.push(op2);
        nums.push(C);
        
        // 清算剩余运算符（现在栈里最多2个运算符）
        while(!ops.empty()) {
            int b = nums.top(); nums.pop();
            int a = nums.top(); nums.pop();
            char op = ops.top(); ops.pop();
            nums.push(calculate(a, b, op));
        }
        
        cout << nums.top() << endl;
    }
    
    return 0;
}